home *** CD-ROM | disk | FTP | other *** search
/ Wonky Flux Batch 2019 02 / Wonky_Flux_Batch_2019-02.zip / Wonky Flux Batch 2019-02 / 089 - Misc Stuff - PD.dsk / FLOAT.S < prev    next >
Text File  |  2019-02-17  |  5KB  |  189 lines

  1. ********************************
  2. *                              *
  3. *  FLOAT auxiliary psuedo-op.  *
  4. *                              *
  5. *    [ USR opcode example ]    *
  6. *                              *
  7. *     Glen Bredon  1/10/82     *
  8. *                              *
  9. ********************************
  10. *                              *
  11. * BRUN from EXEC to set up USR *
  12. *                              *
  13. *  USR decimal #   then puts   *
  14. * the 5 byte packed FP number  *
  15. * in the object code.          *
  16. *                              *
  17. * EXAMPLES:  USR  3.1459266    *
  18. *            USR  5.2E10       *
  19. *                              *
  20. ********************************
  21. *                              *
  22. *   CAUTIONS:                  *
  23. *                              *
  24. * You can use this routine     *
  25. * only if you have Applesoft   *
  26. * on the MOTHERBOARD!!!!!      *
  27. *                              *
  28. * There is no syntax check in  *
  29. * the Applesoft routine FIN    *
  30. * that is used here.           *
  31. *                              *
  32. * The DOS buffers MUST be in   *
  33. * standard positions!          *
  34. *                              *
  35. ********************************
  36.  
  37.           TR
  38.           EXP OFF
  39.  
  40. PASSNUM   = 2            ;Assembler's pass number
  41. ERRCNT    = $1D          ;Assembler's error count
  42. OPNDLEN   = $BB          ;Operand length
  43. WORKSP    = $280         ;Holds operand and comment
  44. USRADR    = $B6DA        ;Must contain JMP to USR routine
  45. PUTBYTE   = $E5F6        ;Stable entry to asm code (in A)
  46.                          ; (preserves Y, but not A or X)
  47. BASIC     = $E000
  48. COUT      = $FDED
  49. KEY       = $C000
  50. STROBE    = $C010
  51. DOSBUF    = $9AA6        ;2nd buffer (cannot be in
  52.                          ; use when calling this.)
  53.  
  54. * Applesoft stuff:
  55.  
  56. ZPSTUFF   = $F10B        ;CHRGET routine
  57. LINNUM    = $50
  58. TXTTAB    = $67
  59. CURLIN    = $75
  60. CHRGET    = $B1
  61. CHRGOT    = $B7
  62. TXTPTR    = $B8
  63. FPGEN     = $A4
  64. ERRFLG    = $D8
  65. TXTPSV    = $F4
  66. FIN       = $EC4A        ;Floats dec # at TXTPTR
  67. MOVMF     = $EB2B        ;Packs & moves FAC to (X,Y)
  68.  
  69. * Ramcard stuff:
  70.  
  71. CONTROL   = $C080
  72. ROMREAD   = %10
  73. ENABLE    = %11
  74. BANK1     = %1000
  75.  
  76.           ORG $2F0
  77.  
  78.           DO 0
  79.  
  80. STADR     MAC
  81.           LDA #]1
  82.           STA ]2
  83.           LDA #>]1
  84.           STA ]2+1
  85.           <<<
  86.  
  87.           FIN
  88.  
  89. * Setup routine on BRUN:
  90.  
  91.           LDA #$4C
  92.           STA USRADR
  93.           >>> STADR.ENTRY;USRADR+1
  94.           RTS
  95.  
  96.           ERR ERROR-$300 ;ERROR must be at $300
  97.  
  98. ERROR     LDX STKSV      ;Comes here on FP error
  99.           TXS
  100.           JSR ZPBACK
  101.           LDY #ILLQUAN-MSGS
  102.           BNE SNDMSG     ;Always taken
  103.  
  104. ENTRY     BIT BASIC      ;Is Applesoft on motherboard?
  105.           BVC FLOAT      ;Branch if so
  106.                          ;Else send error Y=0
  107. SNDMSG    LDA MSGS,Y
  108.           BEQ KEYWAIT
  109.           JSR COUT
  110.           INY
  111.           BNE SNDMSG     ;Always taken
  112. KEYWAIT   BIT STROBE
  113. GK        LDA KEY        ;Wait for keypress
  114.           BPL GK
  115.           INC ERRCNT
  116.           RTS            ;Dont reset STROBE,
  117.                          ;Asm will do it
  118. FLOAT     LDY OPNDLEN
  119.           STA WORKSP,Y   ;So Applesoft will stop
  120.           TAY
  121.           LDA PASSNUM
  122.           BEQ MAKCODE    ;Doesn't matter what we
  123.                          ; send on first pass.
  124. DOFLT     LDA 0,Y        ;Save all zero page
  125.           STA DOSBUF,Y   ; in 2nd DOS buffer
  126.           INY            ; (which is free)
  127.           BNE DOFLT
  128.  
  129.           TSX            ;Save stack pointer in case
  130.           STX STKSV      ; of Applesoft error.
  131.                          ;The FP routines we will use will
  132.                          ; not destroy our rtn adrs.
  133.           BIT CONTROL!ROMREAD ;Turn on Applesoft
  134.           LDX #$1C       ;Set up Applesoft's CHRGET
  135. MVZP      LDA ZPSTUFF-1,X
  136.           STA CHRGET-1,X
  137.           DEX
  138.           BNE MVZP
  139.           STX FPGEN      ;And some other stuff
  140.           STX CURLIN+1   ;These equal forces ONERR
  141.           STX LINNUM+1   ; to look at prog beginning.
  142.           ROR ERRFLG     ;Set ONERR, carry is set
  143.           >>> STADR.ERRCALL;TXTPSV
  144.           >>> STADR.GOTOLN;TXTTAB
  145.           >>> STADR.WORKSP;TXTPTR
  146.  
  147.           JSR CHRGOT     ;FIN routine needs this
  148.           JSR FIN        ;Get FP # at TXTPTR
  149.           LDX #WORKSP    ;Set up to move FAC
  150.           LDY #>WORKSP   ; to WORKSP
  151.           JSR MOVMF      ;Move it
  152.  
  153.           JSR ZPBACK     ;Replace zero page
  154. MAKCODE   LDA WORKSP,Y   ;Send the packed # to asm
  155.           JSR PUTBYTE
  156.           INY
  157.           CPY #5         ; 5 bytes of it
  158.           BLT MAKCODE
  159.           RTS            ;Return to asm
  160.                          ;(which prints the USR line)
  161. ZPBACK    LDY #0         ;Replace zero page
  162.           LUP 2
  163.           BIT CONTROL!ENABLE!BANK1
  164.           --^
  165. ZB        LDA DOSBUF,Y
  166.           STA 0,Y
  167.           INY
  168.           BNE ZB
  169.           RTS
  170.  
  171. MSGS      HEX 878D
  172.           ASC "APPLESOFT NOT FOUND"
  173.           HEX 8D00
  174. ILLQUAN   HEX 878D
  175.           ASC "ILLEGAL QUANTITY"
  176.           HEX 8D00
  177.  
  178. GOTOLN    DFB TWOBRK,>TWOBRK,0,0 ;Link and line # (0)
  179.           DFB $8C        ;CALL token
  180.           ASC '768'
  181.           BRK
  182. ERRCALL   ASC '0'
  183. TWOBRK    BRK
  184.           BRK
  185.  
  186. STKSV     DS 1
  187.  
  188.           ERR STKSV/$3D0
  189.